The present invention relates to a solid-state cache memory subsystem designed to be used as an adjunct to long-term magnetic disk storage media. The cache memory is connected outboard of a conventional data transmission channel not specifically designed for use with such a cache memory subsystem, such that the cache memory system is plug-compatible with and software transparent to a host computer. In particular, the invention is designed to operate in accordance with the cache memory subsystem which is the subject matter of copending Ser. No. 325,346 filed Nov. 27, 1981, Dodd, "Cache Buffered Memory Subsystem", incorporated herein by reference. That application describes a cache memory subsystem which is operatively connected to storage director(s) which, in turn, are connected between a host computer at one terminus and the control modules at another. In turn the control modules connect to the actual disk drive. As is known in the art, the directors serve to interface the host with the control modules which, in turn, interface the directors to the disk drives. The control modules are selected in accordance with a particular type of disk drive used, while the directors may be used with various types of control modules and hence various types of disk drives. According to the invention of that application, the cache is adapted to be used with varying sorts of disk drives and control modules by virtue of direct connection to the director(s).
The function of the solid-state cache memory subsystem in the invention of the copending application referred to above is to store certain data which has been determined to be likely to be called for by the host in advance of an actual host request for the data. This determination is done in accordance with the invention disclosed in further copending applications, Ser. No. 325,350, filed Nov. 27, 1981, Coulson et al, "Detection of Sequential Data Streams", and in a continuation-in-part of that application, Ser. No. 441,901 filed Nov. 15, 1982, having the same title, both incorporated herein by reference. In a preferred embodiment of that invention, once it has been determined that a particular block of data is likely to be called for by the host, the entire disk "track" containing that block of data is brought into the cache memory for temporary storage in anticipation of its being called for by the host computer.
It is desirable for reasons of addressing convenience to subdivide the cache memory into "frames" which are sized to store blocks of data of the sizes which can be expected to be stored therein. Inasmuch as the cache memory subsystem must be adapted to cooperate with varying types of disk drives which in turn have varying amounts of data stored on a given track, means must be provided whereby the cache memory is as useful as is possible despite the fact that disk tracks of varying sizes will be stored therein track by track. For example, if it were assumed that the total cache memory was to contain 200 kilobytes (hereinafter 200 kb) of data, and the track length of a particular disk drive was 20 kb, 10 such tracks would fit into the cache. Stated slightly differently, the cache could be divided into ten 20-kb "frames." When, for example, all ten frames were full and it was desired to cache another track, a cache manager could then simply deallocate a frame, for example, the frame containing the data which had been least recently used and then allocate that frame to the new track. However, if data stored on another type of disk drive having a track size of, say, 25 kg, were desired to be staged, it would be necessary to deallocate two adjacent 20 kb frames in order to accommodate a 25 kb track thus wasting 15 kb of space. Even assuming two adjacent frames could be deallocated without loss of useful data, the waste of space alone would clearly be undesirable.
If, on the other hand, the entire solid-state memory were divided into two subportions or "domains" one adapted to store only tracks of one size, and another proportioned to store tracks of another size, the individual domains of the memory might be efficiently subdivided for allocation to tracks of a particular size. However, the utility of this solution presupposes that the relative activity of the disks having the two sizes of tracks is constant over time, which cannot be expected to be the case. Thus, it is desirable that all area of the solid-state memory be accessible to any track size supported by the cache in order that it can be most efficiently used. Finally, one could divide the cache memory into much smaller, uniformly-sized "pages", e.g., 2 kb, into which a track of any size could be divided. However, this would require complex hardware to implement and would additionally reduce the efficiency of the cache as an individual disk track would necessarily tend to be stored on varying portions of the cache, which would entail substantial additional support, e.g., recall of the numerous storage locations of the portions of a given track.